/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package pe.edu.pucp.Seguridad.Controlador;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Date;
import pe.edu.pucp.Modelo.Configuracion;
import pe.edu.pucp.Modelo.Password;
import pe.edu.pucp.Modelo.Usuario;
import pe.edu.pucp.Seguridad.DAO.ConfiguracionDAO;
import pe.edu.pucp.Seguridad.DAO.UsuarioDAO;
import pe.edu.pucp.Seguridad.Vista.CambiarPassGUI;
import pe.edu.pucp.Util.Constante;
import pe.edu.pucp.Util.Encriptador;
import pe.edu.pucp.Util.ValHelper;

/**
 *
 * @author jorge
 */
public class CambiarPassControlador {
    private UsuarioDAO m;
    private Configuracion cf;
    private Usuario usr;
    private CambiarPassGUI view;    
    public CambiarPassControlador(UsuarioDAO dao, CambiarPassGUI cpview,Usuario user){
        m=dao;
        cf = (new ConfiguracionDAO()).buscarConfiguracion();
        view=cpview;
        usr=user;
        view.addCambiarListener(new cambiarPassListener());
        view.addCancelarListener(new cancelarListener());
    }

    public Password nuevoPass(String pass, Usuario usr){
        Password p = new Password();
        p.setPass(pass);              
        p.setEstadoPassword(m.buscarEstadoPass(Constante.ESTADO_PASSWORD_ACTIVO));
        p.setFechareg(new Date());
        p.setUsuario(usr);
        return p;
    }    
    
    class cambiarPassListener implements ActionListener{
        @Override
        public void actionPerformed(ActionEvent e) {             
            Encriptador cripto=new Encriptador();
            if (m.buscarPassActual(usr.getIdusuario()).getPass().equals(cripto.encriptar(view.getActualPass()))){            
                if (view.getNuevoPass().length()<cf.getMinpasslong()){
                    ValHelper.mostrarError("La nueva contraseña debe tener mínimo "+ cf.getMinpasslong() +" caracteres en total");
                    return;
                }
                if (ValHelper.cantidadLetras(view.getNuevoPass())<cf.getNumcaralf()){
                    ValHelper.mostrarError("La nueva contraseña debe tener mínimo "+ cf.getNumcaralf() +" caracteres alfabéticos");
                    return;
                }
                if (ValHelper.cantidadDigito(view.getNuevoPass())<cf.getNumcarnum()){
                    ValHelper.mostrarError("La nueva contraseña debe tener mínimo "+ cf.getNumcarnum() +" caracteres numéricos");
                    return;
                }
                if (ValHelper.cantidadEspeciales(view.getNuevoPass())<cf.getNumcaresp()){
                    ValHelper.mostrarError("La nueva contraseña debe tener mínimo "+ cf.getNumcaresp() +" caracteres especiales");
                    return;
                }                
                if (m.passwordUsado(cripto.encriptar(view.getNuevoPass()), usr.getIdusuario())){                   
                   ValHelper.mostrarError("La nueva contraseña fue usada por el usuario previamente");
                   return;
                }                                    
                Password np = nuevoPass(cripto.encriptar(view.getNuevoPass()),usr);
                m.guardarPassword(np);             
                ValHelper.mostrarAviso("Se cambio su contraseña con éxito");
                view.dispose();                     
                

            }
            else{
                ValHelper.mostrarError("Su contraseña actual no es correcta");
            }
        }        
    }     
    
    class cancelarListener implements ActionListener{
        @Override
        public void actionPerformed(ActionEvent e) {            
            view.dispose();
        }        
    }    
}
